import os
import pandas as pd
import glob

# 设置中文字段名到英文的映射
field_mapping = {
    'category_id': 'category_id',
    '书名': 'title',
    '作者': 'author',
    '描述': 'description',
    '封面链接': 'cover',
    '图书链接': 'url'
}

# 定义要处理的CSV文件目录
csv_dir = r"c:\Users\25089\Desktop\学习\毕设v2\爬虫\当当网爬虫\图书信息"

# 定义输出的总CSV文件路径
output_file = r"c:\Users\25089\Desktop\学习\毕设v2\爬虫\当当网爬虫\合并后的图书信息.csv"

def merge_csv_files():
    try:
        # 获取目录中所有CSV文件的路径
        csv_files = glob.glob(os.path.join(csv_dir, "*.csv"))
        
        if not csv_files:
            print("未找到任何CSV文件。")
            return
        
        print(f"找到{len(csv_files)}个CSV文件，开始合并...")
        
        # 初始化一个空的DataFrame来存储所有数据
        all_data = pd.DataFrame()
        
        # 遍历所有CSV文件
        for i, csv_file in enumerate(csv_files):
            try:
                # 读取CSV文件，处理可能的编码问题
                df = pd.read_csv(csv_file, encoding='utf-8-sig', on_bad_lines='skip')
                
                # 检查是否包含所有必要的字段
                missing_fields = [field for field in field_mapping.keys() if field not in df.columns]
                if missing_fields:
                    print(f"警告：文件{csv_file}缺少以下字段：{missing_fields}，将跳过此文件。")
                    continue
                
                # 重命名字段为英文
                df_renamed = df.rename(columns=field_mapping)
                
                # 添加到总DataFrame
                all_data = pd.concat([all_data, df_renamed], ignore_index=True)
                
                # 打印进度信息
                if (i + 1) % 10 == 0 or (i + 1) == len(csv_files):
                    print(f"已处理{i + 1}/{len(csv_files)}个文件，当前总记录数：{len(all_data)}")
                
            except Exception as e:
                print(f"处理文件{csv_file}时出错：{str(e)}")
        
        # 保存合并后的数据到新的CSV文件
        if not all_data.empty:
            all_data.to_csv(output_file, index=False, encoding='utf-8-sig')
            print(f"合并完成！总记录数：{len(all_data)}")
            print(f"结果已保存到：{output_file}")
        else:
            print("没有成功合并任何数据。")
        
    except Exception as e:
        print(f"程序执行过程中出错：{str(e)}")

if __name__ == "__main__":
    print("====== CSV文件合并程序 ======")
    print(f"将合并以下目录中的所有CSV文件：{csv_dir}")
    print(f"结果将保存到：{output_file}")
    print("\n字段映射：")
    for cn, en in field_mapping.items():
        print(f"  {cn} -> {en}")
    print("\n开始处理...")
    merge_csv_files()
    print("\n程序结束。")